備份可以分為兩種,一種是Full Backup,複製當下node所有的資料。另一種是Incremental,只針對Full Backup之後異動的資料做備份。
首先執行nodetool snap來取得Full Backup。可針對需要備份的Keyspace來做備份,也可以備份全部的Keyspace。
備份的資料會存在ScyllaDB安裝路徑底下,如預設路徑/var/lib/scylla/data,然後/某keyspace/某table-UUID/snapshots/snaphost_name
例如製作Keyspace vangogh的snapshot。
Incremental Backup預設是disable,必須先到Scylla.yaml中將incremental backups設定為true,然後重啟Scylla。
Incremental Backup的儲存路徑會在/某keyspace/某table-UUID/backups/backups_name。
首先寫入一筆資料到painting裡,然後去上述路徑發現新增了backups的資料夾。
接著再來實作還原的部分。首先確認現在painting有一筆資料,然後有這個狀態下snapshot的檔案。
還原之前,如果table有保留舊資料,必須要先將原本的table truncate。
如果是在新的機器上做還原,則要確定Keyspace已經先創建。
在可以確認不會有新的資料寫入的情況下,可執行nodetool flush,將memtable的資料全部flush到SSTable。
不過一般來說,單一node故障不應該影響資料寫入,這個時候要使用nodetool drain,一樣將資料flush到SSTable,然後停止與client和其他node的連線。
nodetool drain
然後刪除commitlog裡的資料,避免有新的寫入行為覆蓋還原的資料。
rm -rf /var/lib/scylla/commitlog/*
將這個Vangogh底下painting-UUID內的資料刪除,只保留資料夾,會包括我們剛才創立的snapshots。
rm -f /var/lib/scylla/data/vangogh/painting-2e1ee1e0f27611ea8b1c000000000001/*
把snapshot內的資料複製到 /painting-UUID底下。
確認檔案的owner跟group。
chown -R scylla:scylla *
重啟scylla再查詢一次,資料已經還原回來了。
最後執行nodetool repair,同步這期間寫入的資料。